package SocialMediaSentiment;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.StringTokenizer;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class getNameFeatures {

	public static HashMap<String, String> getNamesGeslacht() throws IOException {

		File inputWorkbook = new File("names.xls");
		Workbook w;
		HashMap<String, String> namenGeslacht = new HashMap<String, String>();
		try {
			w = Workbook.getWorkbook(inputWorkbook);
			// Get the first sheet
			Sheet sheet = w.getSheet(0);
			// Loop over first 10 column and lines
			for (int i = 1; i < sheet.getRows(); i++) {
				{

					Cell Naam = sheet.getCell(0, i);
					Cell Geslacht = sheet.getCell(1, i);
					// System.out.println(Naam.getContents());

					namenGeslacht.put(Naam.getContents().toLowerCase(),
							Geslacht.getContents());
					// }
				}
			}

		} catch (BiffException e) {
			e.printStackTrace();
		}
		return namenGeslacht; // names, geslacht
	}

	public static HashMap<Integer, String[]> getNamesFromTrainset()
			throws IOException {
		HashMap<Integer, String[]> trainsetNamesAndSentiment = ReadExcel.read(
				"Trainset.xls", 11, 4);
		return trainsetNamesAndSentiment; // nr tweet , names in tweet,
											// sentiment
	}

	public static float[] compareGeslachtandNames(
			HashMap<String, String> namenGeslacht,
			HashMap<Integer, String[]> namegessent) {
		int size = namegessent.size();
		float vrouwlijkSentiment = 0, vrouw = 0, manSentiment = 0, man = 0, onbekendSentiment =0, onbekend =0;
		String naam, naamupper;
		String splitnaam;
		String[] geslachtSentiment = { "niets", "niets" };
		HashMap<String, String[]> naamGeslachtSentiment = new HashMap<String, String[]>();
		String nameToBeCompared;
		for (int i = 1; i < size; i++) {
			nameToBeCompared = namegessent.get(i)[0];
			// System.out.println(trainsetNamesAndSentiment.keySet());
			naam = nameToBeCompared;
			naamupper = naam;
			naam = naam.toLowerCase();
			StringTokenizer tokenizer = new StringTokenizer(naam, " ?-.[]"); // find
																				// the
																				// sirname
																				// or
																				// middle
																				// or
																				// w/e
																				// JUST
																				// FIND
																				// A
																				// NAME
			geslachtSentiment[0] = "O";
			while (tokenizer.hasMoreTokens()) {
				splitnaam = tokenizer.nextToken();
				if (namenGeslacht.keySet().contains(splitnaam)) { // check if we
																	// know the
																	// geslacht
																	// of this
																	// splitname
					geslachtSentiment[0] = namenGeslacht.get(splitnaam); // set
																			// geslacht
					break;
				}
			}
			geslachtSentiment[1] = "" + namegessent.get(i)[1]; // Add the
																// sentiment of
																// the original
																// tweet
			if (geslachtSentiment[0].equals("F")) {
//				System.out.println(i);
				vrouwlijkSentiment += Float.parseFloat(namegessent.get(i)[1]);
				vrouw++;

			} else if (geslachtSentiment[0].equals("M")) {
				//System.out.println(namegessent.get(i)[1]);
				manSentiment += Float.parseFloat(namegessent.get(i)[1]);
				man++;
			}
			else
			{
				onbekendSentiment+=  Float.parseFloat(namegessent.get(i)[1]);
				onbekend++;
			}

			naamGeslachtSentiment.put(naamupper, geslachtSentiment); // Put
																		// evertyhing
																		// together
																		// as
																		// hashmap
																		// <string,
																		// string
																		// []>
//			System.out.println(naamupper + " " + geslachtSentiment[0] + " "
//					+ geslachtSentiment[1]); // print to see if its working
		}

//		System.out.println("man " + (float) (manSentiment / man) + " vrouw "
//				+ (float) (vrouwlijkSentiment / vrouw));
		float[] sentimentArray = new float[4];
		sentimentArray[0] = (float) (0.5 + (manSentiment/man)/2);
		sentimentArray[1] = (float) (0.5 + (vrouwlijkSentiment/vrouw)/2);
		sentimentArray[2] = (float) (0.5 + (onbekendSentiment/onbekend)/2);
		return sentimentArray;

	}
}